Math 有提供 Round 方法 說明如下
將值四捨五入為最接近的整數或是指定的小數位數。
然後就很馬上測試一下Math.Round(1.5).Dump();
結果是 2
很好沒問題就這樣用吧
直到被發Bug單 還不知道為何會有Bug
原來Math.Round針對四捨五入的預設邏輯是採用四捨六入五成雙的方式
Math.Round(0.5).Dump();
Math.Round(1.5).Dump();
Math.Round(2.5).Dump();
Math.Round(3.5).Dump();
結果會是
0
2
2
4
印象非常深刻的坑
對於 程式是按照我寫的跑 不是按照我想的跑 這句名言
不停在我腦海迴盪
回到正題要如何修好呢public static double Round(double value, MidpointRounding mode)
MidpointRounding這個列舉 AwayFromZero 就是我們習慣的四捨五入
void Main()
{
Math.Round(0.5,MidpointRounding.AwayFromZero).Dump();
Math.Round(1.5,MidpointRounding.AwayFromZero).Dump();
Math.Round(2.5,MidpointRounding.AwayFromZero).Dump();
Math.Round(3.5,MidpointRounding.AwayFromZero).Dump();
}
結果會是
1
2
3
4
這樣就是習慣用的四捨五入了
今天提到Math.Round 雖然有了解法 但是大家在下副本時怎樣能夠讓新手村來實習的人
很容易避開這樣的坑呢 大家想想之後試煉會提到